#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

// 信号处理函数
void signal_handler(int sig)
{
    switch(sig){
        case SIGINT:
            printf("\nGet a signal: SIGINT. You pressed Ctrl+C.\n");
            break;
        case SIGQUIT:
            printf("\nGet a signal: SIGQUIT. You pressed Ctrl+\\.\n");
            break;
        case SIGTSTP:  // 捕获 SIGTSTP 信号 (Ctrl+Z)
            printf("\nGet a signal: SIGTSTP. You pressed Ctrl+Z.\n");
            break;
        default:
            printf("\nReceived an unexpected signal: %d\n", sig);
            break;
    }
    exit(0);  // 处理完信号后退出程序
}

int main()
{
    printf("Current process ID is %d\n", getpid());

    // 注册信号处理器
    signal(SIGINT, signal_handler);  // 捕获 SIGINT 信号 (Ctrl+C)
    signal(SIGQUIT, signal_handler); // 捕获 SIGQUIT 信号 (Ctrl+\\)
    signal(SIGTSTP, signal_handler); // 捕获 SIGTSTP 信号 (Ctrl+Z)

    // 无限循环，等待信号
    for(;;);

    return 0;
}

